//class Solution {
//public:
//    int GetLen(ListNode* head)
//    {
//        ListNode* cur = head;
//        int count = 0;
//        while (cur)
//        {
//            count++;
//            cur = cur->next;
//        }
//        return count;
//    }
//    ListNode* removeNthFromEnd(ListNode* head, int n) {
//        int len = GetLen(head);
//        ListNode* newhead = new ListNode; newhead->next = head;
//        ListNode* cur = newhead;
//        for (int i = 0; i < len - n; i++)
//            cur = cur->next;
//        cur->next = cur->next->next;
//        cur = newhead->next;
//        delete newhead;
//        return cur;
//    }
//};


//class Solution {
//public:
//    bool checkInclusion(string s1, string s2) 
//    {
//        int n = s1.length(), m = s2.length();
//        if (n > m) 
//        {
//            return false;
//        }
//        vector<int> cnt1(26), cnt2(26);
//        for (int i = 0; i < n; ++i) 
//        
//        {
//            ++cnt1[s1[i] - 'a'];
//            ++cnt2[s2[i] - 'a'];
//        }
//        if (cnt1 == cnt2) 
//        {
//            return true;
//        }
//        for (int i = n; i < m; ++i) 
//
//            ++cnt2[s2[i] - 'a'];
//            --cnt2[s2[i - n] - 'a'];
//            if (cnt1 == cnt2) 
//            {
//                return true;
//            }
//        }
//        return false;
//    }
//};



